package meta

import (
	"db"
	"sort"
)

type FileMeta struct {
	FileSha1 string
	FileName string
	FileSize int64
	Location string
	UploadAt string
}

var fileMetas map[string]FileMeta

func init() {
	//初始化
	fileMetas = make(map[string]FileMeta)
}

//新增或者更新文件原信息
func UpdateFileMeta(meta FileMeta) {
	fileMetas[meta.FileSha1] = meta
}

//新增或者更新文件原信息
func UpdateFileMetaDB(meta FileMeta) bool {
	return db.OnFileUploadFinished(meta.FileSha1, meta.FileName, meta.FileSize, meta.Location)
}

// 通过sha1或许文件原信息
func GetFileMeta(fileSha1 string) FileMeta {
	return fileMetas[fileSha1]
}

func GetFileMetaDB(fileSha1 string) FileMeta {
	meta := db.GetFiledMeta(fileSha1)

	fileMeta := FileMeta{
		FileSha1: meta.FileHash,
		FileName: meta.FileName.String,
		FileSize: meta.FileSize.Int64,
		Location: meta.FileAddr.String,
	}
	return fileMeta
}

// 获取批量的文件原信息列表
func GetLashFileMetas(count int) []FileMeta {
	fileMetaArray := make([]FileMeta, len(fileMetas))
	for _, v := range fileMetas {
		fileMetaArray = append(fileMetaArray, v)
	}
	if len(fileMetaArray) == 0 {
		return fileMetaArray
	}
	if count > len(fileMetas) {
		return fileMetaArray
	}
	sort.Sort(ByUploadTime(fileMetaArray))
	return fileMetaArray[0:count]
}

// 通过sha1或许文件原信息
func RemoveFileMeta(fileSha1 string) {
	delete(fileMetas, fileSha1)
}
